/*
 * template.c
 *
 *  Created on: 2013-5-14
 *      Author: xkaying
 */

//模板类型 class interface

#include "template.h"
#include "../common/list.h"

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

typedef struct _templateitem{
		char *super;//模板类型
		char *name;//表示模板名字
		char *value;//默认值,可能为0
		List *range;//模板范围,可能为0
}TemplateItem;

struct _template{
		List *items;
		TemplateItem *pitem;
};

Template *TemplateInit()
{
	Template *ptemp;
	ptemp=(Template*)malloc(sizeof(Template));
	ptemp->items=ListInit();
	ptemp->pitem=0;
	return ptemp;
}

void TemplateAppend(Template *pt,char *super)
{
	assert(pt);
	pt->pitem=(TemplateItem*)malloc(sizeof(TemplateItem));
	pt->pitem->super=super;
	pt->pitem->name=0;
	pt->pitem->value=0;
	pt->pitem->range=0;
}

void TemplateItemAppendName(Template *pt,char *name)
{
	assert(pt);
	assert(pt->pitem);
	pt->pitem->name=name;
}

void TemplateItemAppendRange(Template *pt,char *range)
{
	assert(pt);
	assert(pt->pitem);
	if(pt->pitem->range==0){
		pt->pitem->range=ListInit();
	}
	ListPush(pt->pitem->range,range);
}

void TemplateItemAppendValue(Template *pt,char *value)
{
	assert(pt);
	assert(pt->pitem);
	pt->pitem->value=value;
}

int TemplateIsEmpty(Template *pt)
{
	assert(pt);
	if(pt->pitem){
		return 0;
	}
	return 1;
}
